<?php
require_once('./system/config.php'); //Подключаем главный конфигурационный файл
Pressure::setStart(); // Начинаем сбор данных о нагрузке страницы
$getStrPos = strpos($_SERVER['REQUEST_URI'], '?');
$strUrl = substr($_SERVER['REQUEST_URI'], 0, $getStrPos ? $getStrPos : strlen($_SERVER['REQUEST_URI']));
$arrRequest = explode('/', substr($strUrl, strlen(W_ABSPATH))); // Преобразовываем URL к массиву
User_Session::registerReferer(); // Созраняем поисковые запросы если есть

// Делаем преобразования по языкам
$currentLanguage = 'rus';
if ($arrRequest[0] == 'rus' || $arrRequest[0] == 'eng') {
	$currentLanguage = $arrRequest[0];
	Service_Translate::setLang($arrRequest[0]);
	$arrRequest[0] = '';
	foreach ($arrRequest as $row => $requestWord) {
		if ($row) $arrRequest[$row - 1] = $requestWord;
	}
	if ($row) unset($arrRequest[$row]);
}
if (empty($_COOKIE['currency'])) $currency = Service_Escape::requestDataStringRegExp('currency', '/^[A-Z]{3}$/', 'GET');
if (empty($currency)) $currency = Service_Escape::requestDataStringRegExp('currency', '/^[A-Z]{3}$/', 'COOKIE');
if (empty($currency)) {
	$language = Service_Translate::getLang();
	switch ($language) {
		case 'en': $currency = 'USD'; break;
		case 'ru': $currency = 'RUB'; break;		
	}
}
setcookie('currency', $currency, time() + 7 * 24 * 3600, W_ABSPATH);
Service_Exchange::setCurrency($currency);  


for ($i = 1; $i <= 5; $i++) {
	if (!isset($arrRequest[$i])) $arrRequest[$i] = ''; // Для упрощения обработки контроллером	
}

if (!defined('MAIL_CLASS_DEFINED')) { // Проверка на сервере ли мы
	if ($_SERVER['HTTP_HOST'] . '/' != SITE_URL && ($arrRequest[0] != 'ajax' || $arrRequest[1] != 'hotel' || $arrRequest[2] != 'check_available')) {
		User_Session::moveTo(W_FULLPATH . substr($_SERVER['REQUEST_URI'], 1));	
	}
}
// Определение контроллера для обработки запроса
switch ($arrRequest[0]) {
	case '': case 'index.html': // Страницы, связанные с аутентификацией
		$controller = new Controller_Index($arrRequest); 
		break;
	case 'articles': // Страницы, связанные со статьями
		$controller = new Controller_Article($arrRequest); 
		break;
	case 'categories': // Страницы, связанные с категориями
		$controller = new Controller_Category($arrRequest);
		break;
	case 'orders': // Страницы, связанные с заказами
		$controller = new Controller_Order($arrRequest);
		break;
	case 'questions': // Страницы, связанные с модулем вопрос-ответ
		$controller = new Controller_Question($arrRequest);
		break;
	case 'messages': // Страницы, связанные с сообщениями
		$controller = new Controller_Message($arrRequest);
		break;
	case 'auth': // Страницы, связанные с аутентификацией
		$controller = new Controller_Auth($arrRequest);
		break;
	case 'profile': // Страницы, связанные с профайлом пользователя
		$controller = new Controller_Profile($arrRequest);
		break;
	case 'master': // Страницы, связанные с профайлом пользователя
		$controller = new Controller_Profile($arrRequest);
		break;
	case 'customer': // Страницы, связанные с профайлом пользователя
		$controller = new Controller_Profile($arrRequest);
		break;
	case 'pressure': // Страницы, связанные с Нагрузкой на сайте
		$controller = new Controller_Pressure($arrRequest);
		break;
	case 'test': // Страницы, связанные с тестированием
		$controller = new Controller_Test($arrRequest);
		break;		
	case 'cms':	// Обработка страниц админки
    switch ($arrRequest[1]) {
	  	case '':case 'articles': // Админка - обработка действий, связанных со статьями
		    $controller = new Controller_Admin_Article($arrRequest);
		    break;
	  	case 'countries': // Админка - обработка действий, связанных со странами
		    $controller = new Controller_Admin_Country($arrRequest);
		    break;
	  	case 'cities': // Админка - обработка действий, связанных с городами
		    $controller = new Controller_Admin_City($arrRequest);
		    break;
	  	case 'regions': // Админка - обработка действий, связанных с регионами
		    $controller = new Controller_Admin_Region($arrRequest);
		    break;
	  	case 'hotels': // Админка - обработка действий, связанных с гостиницами
		    $controller = new Controller_Admin_Hotel($arrRequest);
		    break;
	  	case 'notifications': // Админка - обработка действий, связанных с гостиницами
		    $controller = new Controller_Admin_Notification($arrRequest);
		    break;
	  	case 'faq': // Админка - обработка действий, связанных с гостиницами
		    $controller = new Controller_Admin_Faq($arrRequest);
		    break;
	  	case 'bookings': // Админка - обработка действий, связанных с гостиницами
		    $controller = new Controller_Admin_Booking($arrRequest);
		    break;
	  	case 'stat': // Админка - обработка действий, связанных с гостиницами
		    $controller = new Controller_Admin_Stat($arrRequest);
		    break;
		  default:
		    $controller = new Controller_Admin($arrRequest);
		}
		break;
	case 'hms': // Страницы, связанные с управлением гостиницами
		$controller = new Controller_Admin_Hms($arrRequest);
		break;
	case 'ajax': // обработка AJAX - запросов
	  switch ($arrRequest[1]) {
	  	case 'question': // AJAX - обработка вопросов
	  		$controller = new Controller_Ajax_Question($arrRequest);
	  		break;
	  	case 'order': // AJAX - обработка заказов
	  		$controller = new Controller_Ajax_Order($arrRequest);
	  		break;
  		case 'article': // AJAX - обработка вопросов
  			$controller = new Controller_Ajax_Article($arrRequest);
  			break;
	  	case 'message': // AJAX - обработка сообщений
	  		$controller = new Controller_Ajax_Message($arrRequest);
	  		break;
	  	case 'contract': // AJAX - обработка заказов
	  		$controller = new Controller_Ajax_Contract($arrRequest);
	  		break;
	  	case 'common': // AJAX - обработка общих действий
		    $controller = new Controller_Ajax_Common($arrRequest);
		    break;
	  	case 'auth': // AUTH - обработка общих действий
		    $controller = new Controller_Ajax_Auth($arrRequest);
		    break;
	  	case 'album': // AJAX - обработка запросов по альбомам
		    $controller = new Controller_Ajax_Album($arrRequest);
		    break;
	  	case 'autosuggest': // AJAX - обработка автоподстановки
		    $controller = new Controller_Ajax_Autosuggest($arrRequest);
		    break;		  
			case 'booking': // AJAX - обработка бронирования
		    $controller = new Controller_Ajax_Booking($arrRequest);
		    break;	
			case 'hotel': // AJAX - обработка отелей
		    $controller = new Controller_Ajax_Hotel($arrRequest);
		    break;	
			case 'room': // AJAX - обработка комнат
		    $controller = new Controller_Ajax_Room($arrRequest);
		    break;	
			case 'city': // AJAX - обработка отелей
		    $controller = new Controller_Ajax_City($arrRequest);
		    break;	
			case 'statistic': // AJAX - обработка отелей
		    $controller = new Controller_Ajax_Statistic($arrRequest);
		    break;	
			case 'wysiwyg': // AJAX - обработка WYSIWYG
		    $controller = new Controller_Ajax_Wysiwyg($arrRequest);
		    break;	
		  default:
		    $controller = new Controller_Ajax($arrRequest);
		}
		break;
	case 'php_test':
		if (!$arrRequest[1]) $arrRequest[1] = 'all.php';
		include_once(CLASSES . 'Test/' . $arrRequest[1]);
		$duration = Pressure::calculateCurrentDuration();
    Pressure::saveDuration($_SERVER['REQUEST_URI'], $duration);
    exit();
	  break;
	  
	default:
	  $controller = new Controller_Default($arrRequest); // Контроллер по умолчанию
	  break;
}

if ($currentLanguage) $controller->setLanguage($currentLanguage);
if ($controller->error) $controller->showError(); // Проверка не возникли ли ошибки при создании объекта
else {
	$controller->action();
	if ($controller->error) $controller->showError(); // Вывод страницы ошибки при её наличии
}

$duration = Pressure::calculateCurrentDuration();
Pressure::saveDuration($_SERVER['REQUEST_URI'], $duration);
?>